Yamahaルーターで複数のトンネルインターフェースを設定しIPSec接続を行ってみました

Yamahaルーターで複数のトンネルインターフェースを設定しIPSec接続を行ってみました

Clock Icon2024.09.26

初めに

元々ネットワークエンジニアの出ではないということもありBGPとかのあたりって実は机上での理解で実際にルーターで設定書いたことなかったのでVPCと自宅で拠点間VPNで貼ってみてそこで試そうと思っていたのですがその前段のIPSec周りの設定でつまづいていました。

単にサンプルコンフィグを持っていくだけでも良かったのですが、L2TP/IPSecの設定がすでに存在している関係でそこを回避する必要があったのと、しっかりやろうとすると意外と各要素の結び付きが理解できていないなーと思ったのでその辺りの備忘録となります。

結局作業中にL2TP/IPSec側の設定を上書きした状態で保存し設定を破壊するということを何度か発生させ必死に修正する羽目になりました(以前取ったバックアップが行方不明になっており事前共通鍵を消失させたのが痛かったです)。

環境

今回ルーターはRTX 830を利用しています。

> show environment
RTX830 BootROM Ver. 1.00
RTX830 FlashROM Table Ver. 1.00
RTX830 Rev.15.02.28 (Wed Dec 28 19:47:51 2022)

※ しばらくバージョン上げてないのでそろそろ上げないといけないですね...。

設定前にはL2TP/IPSec用にインターネット(any)から受け付けるトンネルのみが存在し、今回はAWSのVPCと拠点間VPN(site-to-site VPN)によるIPSec接続を行う形となります。

overview

本記事の趣旨としてAWS側のVPN設定が大きく影響する部分はないため詳細な設定は割愛しますがCloudFormationでほぼデフォルトお任せ設定で生成されている形になります。

  Vpn:
    Type: AWS::EC2::VPNConnection
    Properties:
      CustomerGatewayId: !Ref CgwId
      Type: ipsec.1
      VpnGatewayId: !Ref Vgw
  Vgw:
    Type: AWS::EC2::VPNGateway
    Properties:
      AmazonSideAsn: !Ref VgwAsn
      Type: ipsec.1
  VgwAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref Vpc
      VpnGatewayId: !Ref Vgw

最終的な設定

最終的な設定は以下のようになりました。

トンネル1はインターネット(any)からの接続のためのL2TP/IPSec用トンネルインターフェース、
トンネル11は今回新規で構築したVPCとの拠点間VPN(IPSec)用トンネルインターフェースとなります。

# show config tunnel 1
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike version 1 2
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 {{router local ip}}
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 text xxxxxxx
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 1

# show config tunnel 11
tunnel select 11
  ipsec ike version 11 2
  ipsec ike duration isakmp-sa 11 28800
  ipsec ike encryption 11 aes-cbc
  ipsec ike group 11 modp1024
  ipsec ike hash 11 sha
  ipsec ike pre-shared-key 11 text xxxxxxx

  ipsec ike duration ipsec-sa 11 3600
  ipsec ike pfs 11 on
  ipsec ike message-id-control 11 on
  ipsec ike child-exchange type 11 2
  ipsec ike keepalive use 11 on rfc4306 10 3
  ipsec ike remote name 11 aws-vpc-1
  ipsec ike remote address 11 {{AWS GIP}}
  ipsec ike remote name 11 {{AWS GIP}} ipv4-addr
  ipsec ike negotiation receive 11 off
  ipsec tunnel outer df-bit clear
  ip tunnel address {{tunnel IP}}/255.255.255.252
  ip tunnel remote address {{Peer IP}}
  ip tunnel tcp mss limit auto

ポイントとなった要素

自分は以下の3つの要素の関連性の理解がポイントとなりました。

  • トンネルインターフェース番号(tunnel_num)
  • SAポリシーID(policy_id)
  • セキュリティゲートウェイID(gateway_id)

パラメーター間の結びつきを考えるた個人的なイメージとしては以下のような形です。

Yamaha_IPSec_setting_image

トンネルインターフェース

https://www.rtpro.yamaha.co.jp/RT/docs/ipsec/guide.html
IPsecでは、暗号化されたIPパケットがインターネットを経由して送受信されますが、 このように暗号によって実現される安全な通信経路をトンネルとよびます。 現実のトンネルが硬いコンクリートで覆われるように、 VPNのトンネルも強固な暗号によって守られているので、 トンネルは仮想的な専用回線とみなすことができます。

RTシリーズでは、トンネルを「仮想的な専用回線」とみなし、 この回線に相当するインタフェースをトンネルインタフェース とよんでいます。RTシリーズには、 LANインタフェースやPPインタフェースというインタフェースがありますが、 トンネルインタフェースも、これらと同様に扱うことができます。

これは各IPSecの受け口となる仮想的なインターフェースとなります。
各種設定は最終的になんらかのインターフェースに結びつきますが当然1回線(1PP)=1IPSec接続というわけにもいかないのでそれ用に論理的なインターフェースを用意する形となります(というのが自分の理解です)。

このトンネルインターフェースに対して各種IPSec周りの設定を与えることでIPSecによる通信ができるようになります。

それぞれのインターフェースは利用できるようになっているため作成自体のコマンドは不要ですがデフォルトでは無効化されているためtunnel enableを実行することで有効化することができます。

tunnel enable 11

SAポリシー

IPSecが概要レベルの理解となっているためふわっとしているところもあるのですがSA(Security Architecture)自体はIPSecにおけるコネクション部分となるようです。

https://www.rfc-editor.org/rfc/rfc4301.html

https://www.rtpro.yamaha.co.jp/RT/manual/nvr500/ipsec/ipsec_chapter.html
鍵や鍵の寿命、暗号や認証のアルゴリズムなどを登録した管理情報は、SA(Security Association) で管理します。SA を区別する ID は自動的に付与されます。SA の ID や状態はshow ipsec sa コマンドで確認することができます。SA には、鍵の寿命に合わせた寿命があります。SA の属性のうちユーザが指定可能なパラメータをポリシーと呼びます。

定義上ではAn SA is a simplex "connection" と表現されているもののIPSec自体はパケットの暗号化や認証などの機能を持つためこれらの設定もSAで持つようです。

このポリシーの作成はipsec sa policyにより行い、POLICY_ID、GATEWAY_IDには識別できる任意の値を入力します。

この段階ではポリシーとトンネルインターフェースは結びついていないためipsec tunnelコマンドを利用することで結びつけます。このコマンドで指定したSAポリシーが結びつくトンネルIFは
tunnel select設定対象としているトンネルIFとなります。

## トンネルIF 11を操作対象とする
tunnel select 11
## policy_id=1101のSAポリシーを生成する
## esp aes-cbc sha-hmacを利用、gateway_id=11に設定される設定群を利用する(後述)
ipsec sa policy 1101 11 esp aes-cbc sha-hmac
## トンネルIF 11にpolicy_id=11のSAポリシーを結びつける
ipsec tunnel 1101

セキュリティゲートウェイ

https://www.rtpro.yamaha.co.jp/RT/docs/ipsec/index.html
VPNの構成では、端末が通信を暗号化する必要がないので、 暗号化のためのソフトウェアを用意する必要はありません。 一方、ルータは、LANからWANへ向かう通信に暗号をかけ、 WANから受信した通信の暗号を解くという機能を持ちます。 IPsecでは、このような機能を持つルータのことを セキュリティ・ゲートウェイ(Security Gateway)とよんでいます。 RTシリーズのルータも同様にセキュリティ・ゲートウェイとして動作します。

IPSec機能を持つデバイスのことをセキュリティゲートウェイと呼ぶようです。

前述のSAがコネクションになるわけですが、その前段である鍵交換(IKE)の情報や各種終端(ゲートウェイ)の情報はSA自体には直接持たないため別途セキュリティ・ゲートウェイとしての設定で持っていると個人的には理解しています。

セキュリティゲートウェイに関しては単一のコマンドで生成するものではなくgateway_idを指定する各種コマンドを実行することで生成される仮想的な集合となりそうです。

  ipsec ike version 11 2
  ipsec ike duration ipsec-sa 11 3600
  ipsec ike duration isakmp-sa 11 28800
  ...

SAポリシーとの紐付けは前述のipsec sa policy`の実行時に指定したgateway_idで結びつく形となります。

command relation image

policy_idとgateway_idはトンネルごとの採番ではない

show config tunnelで各トンネルの設定を見ると以下のようにインデントが入りそれぞれの酵素な設定にみえそうですが実際にはSAポリシー及びそれに結びつくセキュリティゲートウェイのID及びそれに結びつく設定はトンネルごとに管理されているものではなくグローバルな空間で共通となっております。

# show config tunnel 1
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 1101
  ipsec sa policy 1101 11 esp aes-cbc sha-hmac

そのため先の記載を済ませた状態でトンネル1でipsec tunnel 1101を実行しトンネルID11に結びつけられているSAポリシーを割り当てるとトンネル1の側でもトンネル11側に割り当てられているSAポリシーやセキュリティゲートウェイの設定が確認できるようになります。

# show config tunnel 1
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 192.168.10.xxx
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 text ***
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 1

### tunnel_num=1にtunnel_num=11に割り当てられているpolicy_id=1101を設定すると同等のものが設定される
# tunnel select 1
tunnel1# ipsec tunnel 1101
tunnel1# show config tunnel 1
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 1101
  ipsec sa policy 1101 11 esp aes-cbc sha-hmac
  ipsec ike version 11 2
  ipsec ike duration ipsec-sa 11 3600
  ipsec ike duration isakmp-sa 11 28800
...

トンネル毎の設定だと思って誤って上書きしないようにしましょう。

動作確認

設定については最初に記載した通りものとなりますがVPCとのIPSecとの接続を行っている状態で別途L2TP/IPSecを行い接続が確認できたことによりそれぞれのトンネルが独立した設定で動いていることを確認することができます。

# show ipsec sa gateway
sgw   flags local-id         remote-id        # of sa
---------------------------------------------------------------------------
11    U K   192.168.10.x   x.x.x.x.x     i:1 s:1 r:1
1     U     192.168.10.x   y.y.y.y       i:1 s:1 r:1

# show status tunnel 1
TUNNEL[1]:
説明:
  インタフェースの種類: L2TP
  トンネルインタフェースはL2TPで利用されています
  L2TPの状態はshow status ppコマンドとshow status l2tpコマンドで表示できます
# show status tunnel 11
TUNNEL[11]:
説明:
  インタフェースの種類: IPsec
  トンネルインタフェースは接続されています
  開始: 2024/09/26 02:29:05
  通信時間: 41秒
  受信: (IPv4) 1524 パケット [104630 オクテット]
        (IPv6) 0 パケット [0 オクテット]
  送信: (IPv4) 2649 パケット [163190 オクテット]
        (IPv6) 0 パケット [0 オクテット]
  IKEキープアライブ:
           [タイプ]: rfc4306
             [状態]: 送信
         [次の送信]: 10 秒後

AWS側からもIPSEC IS UPが表示されているので正常に接続できていることが確認できています。

AWS VPN Up

※ Tunnel2は意図的に未接続、ステータスのダウンはBGPの設定をしていないため。

終わりに

家で簡単に触ってる分にはトンネルインターフェースをいくつも準備してということもないのでいい機会になりました。やはり設定を破壊した時ほど覚えが早い時はないのでこういう時に自宅に触れる機器があってよかったというところではあります。

Yamahaルーターとしての設定は理解したもののそもそもSAってなんだ?等々調べているとIPSec実は何も知らないというのを実感してしまうのでこれはこれでなんとかして行かなければというところではあります。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.